package code.oldCode.dynamic;

import java.util.ArrayDeque;
import java.util.Deque;

/**
 * @author cuihaoran
 * @date 2024/11/1
 */
public class Random {

    /**
     * 53. 最大子数组和
     * @param nums
     * @return
     */
    public int maxSubArray(int[] nums) {
        //nums = [-2,1,-3,4,-1,2,1,-5,4] ans = [4, -1, 2, 1]
        // dp[i]表示以nums[i]作为子数组的最后一个元素时，的最大子数组和
        int len = nums.length;
        int[] dp = new int[len];
        dp[0] = nums[0];
        int max = dp[0];
        for (int i = 1; i < len; i++) {
            dp[i] = Math.max(nums[i], dp[i - 1] + nums[i]);
            max = Math.max(max, dp[i]);
        }
        return max;
    }

    /**
     * 55. 跳跃游戏
     * @param nums
     * @return
     */
    public boolean canJump(int[] nums) {
        // nums = [3,2,1,0,4]
        // 并非dp（指贪心）
        int len = nums.length;
        int max = 0;
        for (int i = 0; i < len && i <= max; i++) {
            // 到达i后能走多远
            max = Math.max(max, i + nums[i]);
            // 如果到i后能走到i，那么结束
            if (max >= len - 1)
                return true;
        }

        return false;
    }

    public static void main(String[] args) {

    }
}
